package org.example.service;

import org.example.model.dto.QueryFullUserOption;
import org.example.model.dto.ResetUserPwdDto;
import org.example.model.entity.SysUser;
import org.example.model.dto.FullUserDto;
import org.example.model.dto.UserLoginDto;

import javax.servlet.http.HttpServletRequest;
import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * @author weigang
 * @create 2022-11-08 15:01
 */
public interface ISysUserService {
    /**
     * 获取用户信息
     *
     * @param itCodes it code
     * @param option  查询选项（是否需要角色、菜单、部门、team）
     * @return full user
     */
    List<FullUserDto> listFullUsers(Collection<String> itCodes, QueryFullUserOption option);

    /**
     * 获取该用户角色对应部门scope下的所有人的用户名
     *
     * @param fullUser        该用户的
     * @param judgeManageRole 是否判断经理角色
     * @param judgeTeam       是否判断team
     * @return null 表示是管理员，可以看所有  ，否则至少返回自己
     */
    Set<String> getUserNamesForLoginUser(FullUserDto fullUser, boolean judgeManageRole, boolean judgeTeam);

    /**
     * 重置用户密码
     *
     * @param resetUserPwdParam 重置密码信息
     */
    void resetUserPwd(ResetUserPwdDto resetUserPwdParam, FullUserDto currentUser);

    /**
     * 通过ID查询系统用户
     *
     * @param id ID
     * @return 字典信息
     */
    SysUser getSysUserById(Long id);

    /**
     * 登录
     *
     * @param loginParam 登录信息
     * @return null 登录信息是否非法
     */
    void login(UserLoginDto loginParam, HttpServletRequest request);
}
